﻿/**
 *
 * @requires jQuery,EasyUI
 *
 * 扩展validatebox，添加验证两次密码功能
 */
$.extend($.fn.validatebox.defaults.rules, {
    minLength: { // 判断最小长度
        validator: function (value, param) {
            return value.length >= param[0];
        },
        message: '最少输入 {0} 个字符。'
    },
    length: {
        validator: function (value, param) {
            var len = $.trim(value).length;
            return len >= param[0] && len <= param[1];
        },
        message: "输入内容长度必须介于{0}和{1}之间."
    },
    phone: {// 验证电话号码
        validator: function (value) {
            return /^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$/i.test(value);
        },
        message: '格式不正确,请使用下面格式:020-88888888'
    },
    mobile: {// 验证手机号码
        validator: function (value) {
            return /^(13|15|18)\d{9}$/i.test(value);
        },
        message: '手机号码格式不正确'
    },
    tel: {// 验证联系电话
        validator: function (value) {
            return /^(13|15|18)\d{9}$/i.test(value) || /^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$/i.test(value);
        },
        message: '手机号或座机号（020-88888888）格式不对'
    },
    idcard: {// 验证身份证
        validator: function (value) {
            return /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/i.test(value);
        },
        message: '身份证号码格式不正确'
    },
    intOrFloat: {// 验证整数或小数
        validator: function (value) {
            return /^\d+(\.\d+)?$/i.test(value);
        },
        message: '请输入数字，并确保格式正确'
    },
    currency: {// 验证货币
        validator: function (value) {
            return /^\d+(\.\d+)?$/i.test(value);
        },
        message: '货币格式不正确'
    },
    qq: {// 验证QQ,从10000开始
        validator: function (value) {
            return /^[1-9]\d{4,9}$/i.test(value);
        },
        message: 'QQ号码格式不正确'
    },
    integer: {// 验证整数
        validator: function (value) {
            return /^[+]?[1-9]+\d*$/i.test(value);
        },
        message: '请输入整数'
    },
    naturalNumber: {// 验证整数或小数
        validator: function (value) {
            return /^[+]?[1-9]+\d*|0$/i.test(value);
        },
        message: '请输入0或正整数'
    },
    chinese: {// 验证中文
        validator: function (value) {
            return /^[\u0391-\uFFE5]+$/i.test(value);
        },
        message: '请输入中文'
    },
    english: {// 验证英语
        validator: function (value) {
            return /^[A-Za-z]+$/i.test(value);
        },
        message: '请输入英文'
    },
    unnormal: {// 验证是否包含空格和非法字符
        validator: function (value) {
            return /.+/i.test(value);
        },
        message: '输入值不能为空和包含其他非法字符'
    },
    alphanumeric: {// 验证字母、数字、下划线
        validator: function (value) {
            return /^\w+$/i.test(value);
        },
        message: '请输入字母、数字、下划线'
    },
    account: {// 验证账号
        validator: function (value) {
            return /^[a-zA-Z][a-zA-Z0-9_]{4,26}$/i.test(value);
        },
        message: '账号不合法（字母开头，允许4-26字符，允许字母数字下划线）'
    },
    password: {// 验证用户名
        validator: function (value) {
            return /^\w{6,20}$/i.test(value);
        },
        message: '密码只能由6-20个字母、数字、下划线组成'
    },
    faxno: {// 验证传真
        validator: function (value) {
//            return /^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){1,12})+$/i.test(value);
            return /^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$/i.test(value);
        },
        message: '传真号码不正确'
    },
    zip: {// 验证邮政编码
        validator: function (value) {
            return /^[1-9]\d{5}$/i.test(value);
        },
        message: '邮政编码格式不正确'
    },
    ip: {// 验证IP地址
        validator: function (value) {
            return /d+.d+.d+.d+/i.test(value);
        },
        message: 'IP地址格式不正确'
    },
    name: {// 验证姓名，可以是中文或英文
        validator: function (value) {
            return /^[\u0391-\uFFE5]+$/i.test(value) | /^\w+[\w\s]+\w+$/i.test(value);
        },
        message: '请输入姓名'
    },
    email: {
        validator: function (value) {
            return /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/.test(value);
        },
        message: '请输入有效的电子邮件账号(例：abc@126.com)'
    },
    same: {
        validator: function (value, param) {
            if ($("#" + param[0]).val() != "" && value != "") {
                return $("#" + param[0]).val() == value;
            } else {
                return true;
            }
        },
        message: '两次输入的不一致！'
    }
});


/**
 *
 * @requires jQuery,EasyUI
 *
 * 扩展tree，使其支持平滑数据格式
 */
$.fn.tree.defaults.loadFilter = function (res, parentId) {
    var data = {};
    if(res.error == 0) data = res.data;
    else {
        layout.error('发生错误1', res.message);
        return data;
    }
    var opt = $(this).data().tree.options;
    var idFiled, textField, parentField;
    if (opt.parentField) {
        data = data.list;
        idFiled = opt.idFiled || 'id';
        textField = opt.textField || 'text';
        parentField = opt.parentField;
        var i, l, treeData = [], tmpMap = [];
        for (i = 0, l = data.length; i < l; i++) {
            tmpMap[data[i][idFiled]] = data[i];
        }
        for (i = 0, l = data.length; i < l; i++) {
            if (tmpMap[data[i][parentField]] && data[i][idFiled] != data[i][parentField]) {
                if (!tmpMap[data[i][parentField]]['children'])
                    tmpMap[data[i][parentField]]['children'] = [];
                data[i]['text'] = data[i][textField];
                tmpMap[data[i][parentField]]['children'].push(data[i]);
            } else {
                data[i]['text'] = data[i][textField];
                treeData.push(data[i]);
            }
        }
        return treeData;
    }
    return data;
};

/**
 *
 * @requires jQuery,EasyUI
 *
 * 扩展treegrid，使其支持平滑数据格式
 */
$.fn.treegrid.defaults.loadFilter = function (res, parentId) {
    var data = {};
    if(res.error == 0) data = res.data.list;
    else {
        layout.error('发生错误2', res.message);
        return data;
    }
    var opt = $(this).data().treegrid.options;
    var idFiled, textField, parentField;
    if (opt.parentField) {
        idFiled = opt.idFiled || 'id';
        textField = opt.textField || 'title';
        parentField = opt.parentField;
        var i, l, treeData = [], tmpMap = [];
        for (i = 0, l = data.length; i < l; i++) {
            tmpMap[data[i][idFiled]] = data[i];
        }
        for (i = 0, l = data.length; i < l; i++) {
            if (tmpMap[data[i][parentField]] && data[i][idFiled] != data[i][parentField]) {
                if (!tmpMap[data[i][parentField]]['children'])
                    tmpMap[data[i][parentField]]['children'] = [];
                data[i]['text'] = data[i][textField];
                tmpMap[data[i][parentField]]['children'].push(data[i]);
            } else {
                data[i]['text'] = data[i][textField];
                treeData.push(data[i]);
            }
        }
        return {rows:treeData,total:res.data.total};
    }
    return {rows:data,total:res.data.total};
};

/**
 *
 * @requires jQuery,EasyUI
 *
 * 扩展combotree，使其支持平滑数据格式
 */
$.fn.combotree.defaults.loadFilter = $.fn.tree.defaults.loadFilter;

/**
 *
 * @requires jQuery,EasyUI
 *
 * 扩展datalist，使其支持标准的数据接口
 */
$.fn.datagrid.defaults.loadFilter = function (res) {
    if(typeof res.error == 'undefined') return res;
    var data = {rows:{},total:0};
    if(res.error == 0) data = {rows:res.data.list,total:res.data.total};
    else {
        layout.error('发生错误3', res.message);
    }
    return data;
};

/**
 *
 * @requires jQuery,EasyUI
 *
 * 扩展datalist，使其支持标准的数据接口
 */
$.fn.datalist.defaults.loadFilter = $.fn.datagrid.defaults.loadFilter;

/**
 *
 * @requires jQuery,EasyUI
 *
 * 扩展combobox，使其支持标准的数据接口
 */
$.fn.combobox.defaults.loadFilter = function (res, parentId) {
    var data = {};
    if(res.error == 0) data = res.data.list;
    else {
        layout.error('发生错误4', res.message);
    }
    return data;
}

/**
 *
 * @requires jQuery,EasyUI
 *
 * 扩展combobox，使其支持标准的数据接口
 */
$.fn.datetimebox.defaults.formatter = function(date){
    return date.getFullYear()+'-'+date.getMonth()+'-'+date.getDate();
}
